package Action.Seguridad;

import ActionForm.Seguridad.AutenticarActionForm;
import BE.Usuario;
import BL.UsuarioBL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 *
 * @author marvil
 * @todo cambiar println por sistema de logs
 * @todo mostrar mensajes de error
 */
public class AutenticarAction extends DispatchAction {

    private final static String SUCCESS = "success";

    public ActionForward mostrarAutenticar(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {
        AutenticarActionForm objAutenticarActionForm = (AutenticarActionForm) form;
        objAutenticarActionForm.setStrMensaje("");
        //jcguzmanr
        request.setAttribute("strMensaje", "");
        return mapping.findForward("mostrarAutenticar");
    }

    public ActionForward autenticar(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {
        AutenticarActionForm objAutenticarActionForm = (AutenticarActionForm) form;
        UsuarioBL objUsuarioBL = new UsuarioBL();
        Usuario objUsuario = objUsuarioBL.buscarParaAutenticar(objAutenticarActionForm);
        if (objUsuario != null) {
            // verificar si está bloqueado
            if (objUsuario.isBoolBloqueado()) {
                System.out.println("Se intento autenticar con el usuario bloqueado " + objUsuario.getCvIdusuario());
                //jcguzmanr
                request.setAttribute("strMensaje", "El usuario o la clave son incorrectos.\n\nInténtelo nuevamente.");
                objAutenticarActionForm.setStrMensaje("El usuario o la clave no son correctos");
                return mapping.findForward("mostrarAutenticar");
            }
            else {
                //asignar el usuario encontrado a la "variable de sesion"
                HttpSession sesion = request.getSession();
                sesion.setAttribute("usuario", objUsuario.getCvIdusuario());
                sesion.setAttribute("uid", objUsuario.getSrlIdpersona());
                sesion.setAttribute("nombreusuario", objUsuario.getCvNombre() +" " + objUsuario.getCvApellidopaterno() + " " + objUsuario.getCvApellidomaterno());
                System.out.println("Se autentico el usuario "+ objUsuario.getCvIdusuario() + " con id =" + objUsuario.getSrlIdpersona());
            }
        }
        else {
            objAutenticarActionForm.setStrMensaje("El usuario o la clave no son correctos");
            request.setAttribute("strMensaje", "El usuario o la clave son incorrectos.\n\nInténtelo nuevamente.");
            return mapping.findForward("mostrarAutenticar");
        }
        return mapping.findForward("start");
    }

    public ActionForward deautenticar(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {
        HttpSession sesion = request.getSession(true);
        String strIdUsuario = (String) sesion.getAttribute("usuario");
        Integer objIdUsuario = (Integer) sesion.getAttribute("uid");
        sesion.setAttribute("usuario", null);
        sesion.setAttribute("uid", null);
        request.setAttribute("strMensaje", "Se deautentico el usuario "+ strIdUsuario + " con id =" + objIdUsuario);
        System.out.println("Se deautentico el usuario "+ strIdUsuario + " con id =" + objIdUsuario);
        return mapping.findForward("start");
    }

}
